{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 14\n",
    "\n",
    "# 估算圆周率\n",
    "Book_3《数学要素》 | 鸢尾花书：从加减乘除到机器学习 (第二版)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "70bd6aa7-2ee5-4574-8bed-43c6f8137698",
   "metadata": {},
   "source": [
    "这段代码使用莱布尼茨（Leibniz）级数来逐步逼近$\\pi$的值，并通过图像展示近似值随项数的变化情况。莱布尼茨级数是一个交错级数，用于计算$\\pi$，其通项公式为：\n",
    "\n",
    "$$\n",
    "\\pi = 4 \\sum_{n=1}^{\\infty} \\frac{(-1)^{n+1}}{2n - 1}\n",
    "$$\n",
    "\n",
    "其中，每一项为$\\frac{(-1)^{n+1}}{2n - 1}$，$n$为正整数。该级数逐项累加，可以得到$\\pi$的逐步近似值，尽管收敛速度较慢。\n",
    "\n",
    "代码的执行过程分为以下几个步骤：\n",
    "\n",
    "1. **生成项数组**：计算前100项的通项值$\\frac{(-1)^{n+1}}{2n - 1}$，并存储在数组中。\n",
    "\n",
    "2. **累积求和**：使用累加的方式计算前$n$项的部分和，并将每个部分和结果乘以4，以此生成$\\pi$的近似值数组。这一数组存储了逐步逼近$\\pi$的结果，即$\\pi$的部分和表示：\n",
    "\n",
    "   $$\n",
    "   \\pi \\approx 4 \\sum_{k=1}^{n} \\frac{(-1)^{k+1}}{2k - 1}\n",
    "   $$\n",
    "\n",
    "3. **可视化近似值**：代码绘制了每一项的累积结果，通过`stem`图显示近似值的收敛趋势。横轴表示项数$k$，纵轴为$\\pi$的近似值。同时在图中添加了一条水平线，表示真实的$\\pi$值$\\approx 3.14159$，以便直观地比较各部分和的结果与真实$\\pi$值的接近程度。\n",
    "\n",
    "通过此图可以观察到，随着项数的增加，近似值逐渐趋近于$\\pi$，但由于交错级数的缓慢收敛特性，需要更多的项才能接近真实值。这种可视化有助于理解莱布尼茨级数如何逼近$\\pi$。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed464004-7d9e-4a9e-9e64-399475b2fe9c",
   "metadata": {},
   "source": [
    "## 导入包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "54c4223c-e074-4b2a-862f-79c7e81f3200",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "80a1aa9b-11a7-4097-b8e7-c0ab78c37af1",
   "metadata": {},
   "source": [
    "## 初始化数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "52e61479-fc09-4c46-b2b5-e2a66e133b9b",
   "metadata": {},
   "outputs": [],
   "source": [
    "n_array = np.arange(1, 100 + 1, 1)  # 定义项数n的数组，从1到100"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4bff8e4-edc6-4d14-8173-94c2f8f56c5f",
   "metadata": {},
   "source": [
    "## 计算Leibniz级数的每一项"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "cc7cf7c3-813f-474d-ae2f-fdbdb882a225",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.        , -0.33333333,  0.2       , -0.14285714,  0.11111111,\n",
       "       -0.09090909,  0.07692308, -0.06666667,  0.05882353, -0.05263158,\n",
       "        0.04761905, -0.04347826,  0.04      , -0.03703704,  0.03448276,\n",
       "       -0.03225806,  0.03030303, -0.02857143,  0.02702703, -0.02564103,\n",
       "        0.02439024, -0.02325581,  0.02222222, -0.0212766 ,  0.02040816,\n",
       "       -0.01960784,  0.01886792, -0.01818182,  0.01754386, -0.01694915,\n",
       "        0.01639344, -0.01587302,  0.01538462, -0.01492537,  0.01449275,\n",
       "       -0.01408451,  0.01369863, -0.01333333,  0.01298701, -0.01265823,\n",
       "        0.01234568, -0.01204819,  0.01176471, -0.01149425,  0.01123596,\n",
       "       -0.01098901,  0.01075269, -0.01052632,  0.01030928, -0.01010101,\n",
       "        0.00990099, -0.00970874,  0.00952381, -0.00934579,  0.00917431,\n",
       "       -0.00900901,  0.00884956, -0.00869565,  0.00854701, -0.00840336,\n",
       "        0.00826446, -0.00813008,  0.008     , -0.00787402,  0.00775194,\n",
       "       -0.00763359,  0.0075188 , -0.00740741,  0.00729927, -0.00719424,\n",
       "        0.0070922 , -0.00699301,  0.00689655, -0.00680272,  0.00671141,\n",
       "       -0.00662252,  0.00653595, -0.00645161,  0.00636943, -0.00628931,\n",
       "        0.00621118, -0.00613497,  0.00606061, -0.00598802,  0.00591716,\n",
       "       -0.00584795,  0.00578035, -0.00571429,  0.00564972, -0.00558659,\n",
       "        0.00552486, -0.00546448,  0.00540541, -0.00534759,  0.00529101,\n",
       "       -0.0052356 ,  0.00518135, -0.00512821,  0.00507614, -0.00502513])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a_n_array = (-1)**(n_array + 1) / (2 * n_array - 1)  # 根据公式计算每项，(-1)^(n+1) / (2n - 1)\n",
    "a_n_array"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1fb7b4b7-aec9-4538-b76b-965e6674bbc4",
   "metadata": {},
   "source": [
    "## 计算部分和"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7f365fcd-b5ed-4d6e-872c-7d2b8bbc3230",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.        , 0.66666667, 0.86666667, 0.72380952, 0.83492063,\n",
       "       0.74401154, 0.82093462, 0.75426795, 0.81309148, 0.7604599 ,\n",
       "       0.80807895, 0.76460069, 0.80460069, 0.76756365, 0.80204641,\n",
       "       0.76978835, 0.80009138, 0.77151995, 0.79854698, 0.77290595,\n",
       "       0.7972962 , 0.77404038, 0.7962626 , 0.77498601, 0.79539417,\n",
       "       0.77578633, 0.79465425, 0.77647243, 0.79401629, 0.77706714,\n",
       "       0.79346058, 0.77758757, 0.79297218, 0.77804681, 0.79253956,\n",
       "       0.77845506, 0.79215369, 0.77882035, 0.79180737, 0.77914914,\n",
       "       0.79149482, 0.77944663, 0.79121133, 0.77971708, 0.79095303,\n",
       "       0.77996402, 0.79071671, 0.78019039, 0.79049967, 0.78039866,\n",
       "       0.79029965, 0.78059092, 0.79011472, 0.78076893, 0.78994324,\n",
       "       0.78093423, 0.78978379, 0.78108814, 0.78963515, 0.78123179,\n",
       "       0.78949625, 0.78136617, 0.78936617, 0.78149215, 0.78924409,\n",
       "       0.7816105 , 0.7891293 , 0.78172189, 0.78902116, 0.78182692,\n",
       "       0.78891912, 0.78192611, 0.78882266, 0.78201994, 0.78873135,\n",
       "       0.78210883, 0.78864478, 0.78219317, 0.78856259, 0.78227329,\n",
       "       0.78848447, 0.7823495 , 0.7884101 , 0.78242208, 0.78833924,\n",
       "       0.78249128, 0.78827163, 0.78255735, 0.78820706, 0.78262047,\n",
       "       0.78814533, 0.78268085, 0.78808626, 0.78273866, 0.78802967,\n",
       "       0.78279407, 0.78797541, 0.78284721, 0.78792335, 0.78289823])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a_n_cumsum = np.cumsum(a_n_array)  # 累积求和，计算Leibniz级数的部分和\n",
    "a_n_cumsum"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4dd34383-af58-4c25-8198-33e9fbb2450a",
   "metadata": {},
   "source": [
    "## 计算π的近似值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5bb5a354-f0c7-4cdd-9cad-e09862762c5c",
   "metadata": {},
   "outputs": [],
   "source": [
    "pi_appx = 4 * a_n_cumsum  # 将部分和乘以4，得到π的近似值"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ac6d52a6-0485-473e-bf84-bdb9241b6f57",
   "metadata": {},
   "source": [
    "## 绘制π的近似值随n变化的图像"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0d9b5d0c-d40d-40f2-9687-1afc3e11e279",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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WZg1a5YCFREREREREeVG3lz6nYiIiIiIqCdhs0VERERERKQANltEREREREQKYLNFRERERESkADZbRERERERECmCzRUREREREpAA2W0RERERERApgs0VERERERKQANltEREREREQKYLNFRERERESkADZbRERERERECmCzRUREREREpAA2W0RERERERApgs0VERERERKQAvdoF5JNwRMIn+5vR6PKjosSMsYPKodNq1C6LiIiIiIgKEJut/1O3qx4L1+5BfatffqzKYcaCyTW4bHiVipUREREREVEh4mGEONFo3bZie1yjBQANrX7ctmI76nbVq1QZEREREREVqqJvtsIRCQvX7oGU4rnoYwvX7kE4kmoJIiIiIiKi1Iq+2fpkf3PSjFYsCUB9qx+f7G8WVxQRERERERW8om+2Gl0dN1rdWY6IiIiIiAhgs4WKEnNOlyMiIiIiIgLYbGHsoHJUOczo6ALvGpy4KuHYQeUiyyIiIiIiogJX9M2WTqvBgsk1AJDUcEV/XjC5hvfbIiIiIiKijBR9swUAlw2vQu0NI1FRaop7vNJhRu0NI3mfLSIiIiIiyhhvavx/LhtehfGn98FZ970HAHjx5jE4f3BfzmgREREREVG3cGYrRmxjNXZQORstIiIiIiLqNjZbREREREREClC12VqyZAnGjBmDkpISVFRU4Oqrr8YXX3zR5bhAIID58+fj5JNPhslkwmmnnYbnn39eQMVERERERETpUfWcrQ0bNmDmzJkYM2YMQqEQ5s+fj0suuQR79uyBzWbrcNw111yDI0eOYPny5Tj99NPR2NiIUCgksHIiIiIiIqLOqdps1dXVxf38wgsvoKKiAtu2bcP3vve9Dsds2LABX331FcrLT9z76pRTTlG6VCIiIiIioozk1dUIW1tbAUBuolJZs2YNRo8ejYceegivvPIKbDYbvv/97+M3v/kNLBZL0vKBQACBQED+2el0AgB8Xh8aGxtht9vhdrths9nQ4vLKyx1vPg6pxAqPxyMvozW2r7+5qRkhmxmRSASSJMFgMKDZ6Zaf93p9cLf4YLfb4fV6YTKZ4PK219F0rAkoK4Hb7U65/pbjLQiaDdBoNAgGg5B0Rvm5o0ePom8vh1x3IBBAW6T9Yh4ejxee1gBsNpu8/qPHW+XnXS432nSQ6/b5fNAYzEnrj9YdCoXgD0ZSvrfo+o+1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yspKAEj6pqOxsTHpWxOidGzbtg2NjY0YNWoU9Ho99Ho9NmzYgCeeeAJ6vV7OFTNHuVBVVYWampq4x4YOHYqDBw8C4Gcc5d7dd9+Ne++9F9deey3OOussTJ06FXfddReWLFkCgJkjZaWTr8rKSrS1teH48eMdLpMONltEaZAkCbfffjveeustvP/++xg0aFDc84MGDUJlZSXWrVsnP9bW1oYNGzbgvPPOE10u9QAXXXQRdu7ciR07dsj/jR49Gtdffz127NiBU089lZmjnBk/fnzS7Sz27duHk08+GQA/4yj3vF4vtNr4P0N1Op186XdmjpSUTr5GjRoFg8EQt0x9fT127dqVUQZ5GCFRGmbOnInXXnsNb7/9NkpKSuRvQhwOBywWi3z/o8WLF2Pw4MEYPHgwFi9eDKvViuuuu07l6qkQlZSUyOcERtlsNvTu3Vt+nJmjXLnrrrtw3nnnYfHixbjmmmvwySef4Nlnn8Wzzz4LAPyMo5ybPHkyFi1ahIEDB2LYsGH49NNP8eijj2L69OkAmDnKntvtxr///W/55/3792PHjh0oLy/HwIEDu8yXw+HAjBkz8Itf/AK9e/dGeXk5fvnLX+Kss85KumhVp7p/EUWi4gEg5X8vvPCCvEwkEpEWLFggVVZWSiaTSfre974n7dy5U72iqceJvfS7JDFzlFtr166Vhg8fLplMJunMM8+Unn322bjnmTfKJafTKd1xxx3SwIEDJbPZLJ166qnS/PnzpUAgIC/DzFE2Pvjgg5R/u914442SJKWXL5/PJ91+++1SeXm5ZLFYpKuuuko6ePBgRnVoJEmSctI+EhERERERkYznbBERERERESmAzRYREREREZEC2GwREREREREpgM0WERERERGRAthsERERERERKYDNFhERERERkQLYbBERERERESmAzRYREfVIGo0Gf/rTn4S+5imnnILHHntM6GsSEVH+YrNFRER55aabbsLVV1+tdhlERERZY7NFRERERESkADZbRESU1y688ELMnj0b//3f/43y8nJUVlbivvvui1vmX//6F773ve/BbDajpqYG69atS1rP4cOH8aMf/Qi9evVC7969MWXKFBw4cAAA8M9//hNWqxWvvfaavPxbb70Fs9mMnTt3drv2F154AQ6HI2U9RETU87HZIiKivPfSSy/BZrPhH//4Bx566CHcf//9cgMTiUTwgx/8ADqdDps3b8bTTz+Ne+65J2681+vFf/zHf8But2Pjxo3YtGkT7HY7LrvsMrS1teHMM8/Eww8/jJ///Of4+uuv8e233+InP/kJli5dirPOOqtbNT/88MP45S9/ib/85S+YNGlS1tuAiIgKj17tAoiIiLoyYsQILFiwAAAwePBgLFu2DH/7298wadIk/PWvf8XevXtx4MABDBgwAACwePFiXH755fL4lStXQqvV4rnnnoNGowFwYtaprKwM69evxyWXXIKf//zneOeddzB16lQYjUaMGjUKd9xxR7fqnTt3Ll566SWsX7++280aEREVPjZbRESU90aMGBH3c1VVFRobGwEAe/fuxcCBA+VGCwDGjRsXt/y2bdvw73//GyUlJXGP+/1+fPnll/LPzz//PM444wxotVrs2rVLbswy8cgjj8Dj8WDr1q049dRTMx5PREQ9Bw8jJCKivGcwGOJ+1mg0iEQiAABJkpKWT2ySIpEIRo0ahR07dsT9t2/fPlx33XXycp999hk8Hg88Hg8aGhq6Vev555+PcDiMP/7xj90aT0REPQdntoiIqKDV1NTg4MGD+Pbbb9G/f38AwMcffxy3zMiRI/GHP/wBFRUVKC0tTbme5uZm3HTTTZg/fz4aGhpw/fXXY/v27bBYLBnVM3bsWMyaNQuXXnopdDod7r777u69MSIiKnic2SIiooJ28cUXY8iQIZg2bRo+++wzfPjhh5g/f37cMtdffz369OmDKVOm4MMPP8T+/fuxYcMG3HHHHTh06BAA4NZbb0V1dTV+9atf4dFHH4UkSfjlL3/ZrZrGjRuHd999F/fffz9+97vfZf0eiYioMLHZIiKigqbVarF69WoEAgGMHTsWt9xyCxYtWhS3jNVqxcaNGzFw4ED84Ac/wNChQzF9+nT4fD6Ulpbi5ZdfxjvvvINXXnkFer0eVqsVr776Kp577jm88847AID169dDo9HIl4vvyvjx4/HnP/8Z//M//4Mnnngi12+biIgKgEZKdbA7ERERxXnxxRexaNEi7NmzJ+kcMiIiolQ4s0VERJSGuro6LF68mI0WERGljTNbRERERERECuDMFhERERERkQLYbBERERERESmAzRYREREREZEC2GwREREREREpgM0WERERERGRAthsERERERERKYDNFhERERERkQLYbBERERERESmAzRYREREREZEC2GwREREREREp4P8DHdpEI+AFsEEAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(10, 4))  # 创建绘图窗口\n",
    "\n",
    "plt.xlabel(\"Index, k\")  # 设置x轴标签\n",
    "plt.ylabel(\"Approx pi\")  # 设置y轴标签\n",
    "plt.stem(n_array, pi_appx)  # 使用stem图展示π的近似值\n",
    "ax.grid(linestyle='--', linewidth=0.25, color=[0.5, 0.5, 0.5])  # 添加网格线\n",
    "plt.axhline(y=np.pi, color='r', linestyle='-')  # 添加水平线表示真实的π值\n",
    "\n",
    "plt.xlim(n_array.min(), n_array.max())  # 设置x轴范围\n",
    "plt.ylim(2.5, 4.1)  # 设置y轴范围\n",
    "\n",
    "plt.gca().spines['right'].set_visible(False)  # 隐藏右边框\n",
    "plt.gca().spines['top'].set_visible(False)  # 隐藏上边框"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "85a80909-2aac-49ed-bb7a-f8cc6b80ee7d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ecd322f4-f919-4be2-adc3-69d28ef25e69",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
